/**
 * 安全格式化json字符串
 * @param {string} jsonStr json字符串
 * @return {undefined|any}
 */
import Taro from '@tarojs/taro'
import moment from 'moment'
import { getServerUrls } from './ServerUrls'

export function jsonParse(jsonStr: string) {
  try {
    return JSON.parse(jsonStr)
  } catch (_) {
    return undefined
  }
}

/**
 * 车牌号校验
 * @param {string} isVehicleNumber
 */
export function isVehicleNumber(vehicleNumber) {
  let xxreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DABCEFGHJK]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/ // 2021年新能源车牌不止有DF
  let creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
  if (vehicleNumber.length == 7) {
    return creg.test(vehicleNumber)
  } else if (vehicleNumber.length == 8) {
    return xxreg.test(vehicleNumber)
  } else {
    return false
  }
}

/**
 * 手机号中间四位加密
 * @param {string} phoneNumber
 */
export function encryptPhone(phoneNumber: string): string {
  if (!phoneNumber) return null
  const number = `${phoneNumber}`
  const reg = /^(\d{3})\d{4}(\d{4})$/
  return number.replace(reg, '$1****$2')
}

/**
 * 数值转化为人民币大写
 * @param {number} num 需要转为大写的数值
 * @returns {string} 大写人民币数值
 */
export function digitUppercase(num: number): string {
  const fraction = ['角', '分']
  const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
  const unit = [
    ['元', '万', '亿'],
    ['', '拾', '佰', '仟']
  ]
  const head = num < 0 ? '欠' : ''
  let n = Math.abs(num)
  let s = ''
  for (let i = 0; i < fraction.length; i += 1) {
    s += (digit[Math.floor(n * 10 * 10 ** i) % 10] + fraction[i]).replace(/零./, '')
  }
  s = s || '整'
  n = Math.floor(n)
  for (let i = 0; i < unit[0].length && n > 0; i += 1) {
    let p = ''
    for (let j = 0; j < unit[1].length && n > 0; j += 1) {
      p = digit[n % 10] + unit[1][j] + p
      n = Math.floor(n / 10)
    }
    s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s
  }
  return (
    head +
    s
      .replace(/(零.)*零元/, '元')
      .replace(/(零.)+/g, '零')
      .replace(/^整$/, '零元整')
  )
}

/**
 * 金额格式化
 * @param {number} number 金额
 * @param {number} places 保留小数位数
 * @param {string} symbol 货币类型符号
 * @param {string} thousand 千位分隔符
 * @param {string} decimal 小数点
 */
export function moneyFormat(number: number, places = 2, symbol = '', thousand = ',', decimal = '.'): string {
  if (!number) return '0'
  // negative表示如果钱是负数有就显示“-”如果不是负数 就不显示负号
  const negative = number < 0 ? '-' : ''
  const num = parseFloat(Math.abs(number).toFixed(places))
  const i = `${Math.floor(num)}`
  let j = i.length
  j = j > 3 ? j % 3 : 0
  return (
    symbol +
    negative +
    (j ? i.substr(0, j) + thousand : '') +
    i.substr(j).replace(/(\d{3})(?=\d)/g, `$1${thousand}`) +
    (places
      ? decimal +
        Math.abs(num - parseFloat(i))
          .toFixed(places)
          .slice(2)
      : '')
  )
}

/**
 * 获取资源的完整地址
 * @param src
 */
export function getFullSrc(src: string): string {
  if (!src) return
  return src.indexOf('http') === -1 ? getServerUrls().baseUrl + src : src
}

/**
 * 图片地址
 * @param src
 */

export function getFullSrcs(src: string): string {
  if (!src) return
  return src.indexOf('http') === -1 ? getServerUrls().baseUrls + src : src
}

/**
 * 图片地址
 * @param src
 */

export function getQRFullSrcs(src: string): string {
  if (!src) return
  return src.indexOf('http') === -1 ? getServerUrls().baseUrl + src : src
}

/**
 * 获取资源相对地址
 */
export function getRelativeSrc(src: string): string {
  if (!src) return
  if (src.indexOf('http') === -1) return src
  const arr = src.replace(/\/\//g, '').split('/')
  return '/' + arr.slice(1).join('/')
}

/**
 * 富文本图片处理
 * @param html
 */
export function richTextImgFix(html: string): string {

  return html
    .replace(/src="\//g, `src="${getServerUrls().baseUrl }/`)
    .replace(/(<p><\/p>)+/g,`<br />`)
    .replace(/<img/g, '<img style="max-width:100%;height:auto;display:block" class="img"')
}

export function showHttpError(res) {
  return Taro.showToast({ title: res?.message || res?.error?.message || '请求失败', icon: 'none' })
}

/**
 * 每天秒数 转 时间字符串
 * @param {number} time 秒数
 */
export function timeToString(time: number) {
  const Time = moment.duration(time, 's')
  const times = [complement(Time.hours()), complement(Time.minutes())]

  return times.join(':')
}

/**
 * 补齐2位
 * @param {number} num 时间
 */
export function complement(num: number) {
  return num < 10 ? `0${num}` : `${num}`
}

export function subscribeMessage(arrId) {
  Taro.requestSubscribeMessage({
    tmplIds: arrId,
    success: function(result) {
      console.log(result)
    },
    fail: function(err) {
      console.log(err)
    }
  })
}

// (判断购物车结算的时候是否存在选中的数据)
export function findCheckedItem(arr) {
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i];
    if (item.isChecked === true) {
      return true;
    }
  }
  return false;
}

// js 计算递归数组children中checked=true 的个数
export function countChecked(arr) {
  return arr.reduce((count, item) => {
    if (item.shopList) {
      count += countChecked(item.shopList);
    } else if (item.isChecked) {
      count++;
    }
    return count;
  }, 0)
}

// 合并
export  function concatArray(arr)  {
  // 数组中merchant_id相同的对象合并成一个children
  let b = []
    arr.forEach((item, index) => {
    let flag = true
    b.forEach((item2, index2) => {
      if (item.merchant_id === item2.merchant_id) {
        flag = false
        b[index2].shopList.push(item)
      }
    })
    if (flag) {
      b.push({
        record_id:item.record_id,
        merchant_id: item.merchant_id,
        merchant_name:item.merchant_name,
        shopList: [item]
      })
    }
  })
  return b;
}
// 查找对应的下标
export  function findIndices(data,provinceName, cityName, districtName) {
  let provinceIndex = null;
  let cityIndex = null;
  let districtIndex = null;

  // 遍历省份
  data.forEach((province, index) => {
    if (province.name === provinceName) {
      provinceIndex = index;

      // 遍历城市
      province.cityList.forEach((city, cityIdx) => {
        if (city.name === cityName) {
          cityIndex = cityIdx;

          // 遍历区县
          city.areaList.forEach((district, districtIdx) => {
            if (district === districtName) {
              districtIndex = districtIdx;
              // 如果找到了所有下标，就返回它们
              return [provinceIndex, cityIndex, districtIndex];
            }
          });

          // 如果没有在区县中找到匹配项，就中断城市的循环
          if (districtIndex !== null) {
            return;
          }
        }
      });

      // 如果没有在城市中找到匹配项，就中断省份的循环
      if (cityIndex !== null) {
        return;
      }
    }
  });

  // 如果没有找到匹配项，就返回null
  if (provinceIndex === null || cityIndex === null || districtIndex === null) {
    return null;
  }

  return [provinceIndex, cityIndex, districtIndex];
}

// 点击首页底部菜单之后跳转的页面
export  function tabClick(value) {
  // 园区
  if(value===0){
    Taro.redirectTo({ url: `/pages/home/index?type=${value}` });
    return
  }
  // 资本
  if (value === 1 ) {
    Taro.redirectTo({ url: `/pages/home-new-con/capital/index` });
    return
  }
  // 资本源版本
  // if (value === 1 ) {
  //   Taro.redirectTo({ url: `/pages/home-new-con/capital/indexOld` });
  //   return
  // }


  // 人才
  if ( value === 2) {
    Taro.redirectTo({ url: `/pages/home-new-con/personnel/index` });
    return
  }
  // if ( value === 3) {
  //   Taro.redirectTo({ url: `/pages/home-new-con/platform/index` });
  //   return
  // }
  // 技术
  if ( value === 3) {
    Taro.redirectTo({ url: `/pages/home-new-con/technology/index` });
    return
  }
  // 数据
  if ( value === 4) {
    Taro.redirectTo({ url: `/pages/home-new-con/statics/index` });
    return
  }
  // // 个人中心
  // if ( value === 5) {
  //   Taro.redirectTo({ url: `/pages/my/index` });
  //   return
  // }
}

// 点击顶部标题之后跳转的页面
export function topNavClick(url) {
  const pages = Taro.getCurrentPages(); // 获取当前页面栈
  if (pages.length < 2) {
    // 如果页面栈长度小于2，直接跳转到首页
    Taro.redirectTo({ url: '/pages/home/index' });
  } else {
    // 如果传入了url，跳转到指定页面，否则返回上一页面
    if (url) {
      Taro.redirectTo({ url: url });
    } else {
      Taro.navigateBack({
        delta: 1 // 返回上一页
      });
    }
  }
}

// 点击顶部标题之后跳转的页面
export function topNavClick1(url) {
  const pages = Taro.getCurrentPages(); // 获取当前页面栈
  if (pages.length < 2) {
    // 如果页面栈长度小于2，直接跳转到首页
    Taro.redirectTo({ url: '/pages/my/index' });
  } else {
    // 如果传入了url，跳转到指定页面，否则返回上一页面
    if (url) {
      Taro.redirectTo({ url: url });
    } else {
      Taro.navigateBack({
        delta: 1 // 返回上一页
      });
    }
  }
}

// 获取导航栏的高度，paddingTop
export  function getNavTop() {
  return Taro.getStorageSync('NavBarHeight');
}


// 小数转成百分比
export function convertToPercentage(number) {
  return (number * 100) + '%';
}

// 去除富文本html标签
export function stripHtmlTags(htmlString) {
  const tempDiv = document.createElement("div");
  tempDiv.innerHTML = htmlString;
  return tempDiv.textContent || tempDiv.innerText || "";
}


export function goCustomerService  ()  {
  const plugin = Taro.requirePlugin("chatbot")
  Taro.login({
    success: function (res) {
      if (res.code) {
        //发起网络请求
        WxLogin({code: res.code}).then(result => {
          if (result.code === 0) {
            plugin.init({
              appid: "Fg2xRGAzGIxcoZHmWuyeLeX7d5YV3P", //微信对话开放平台中应用绑定小程序插件appid
              openid: result?.data.openid, // 小程序用户的openid，必填项
              userHeader: "", // 用户头像,不传会弹出登录框
              userName: "", // 用户昵称,不传会弹出登录框
              anonymous: false, // 是否允许匿名用户登录，版本1.2.9后生效, 默认为false，设为true时，未传递userName、userHeader两个字段时将弹出登录框
              success: () => {
                // 获取的openid存入storage，方便之后使用
                Taro.setStorageSync("openId", result.data.openid);
                // Taro.navigateTo({
                //   url:"plugin://chatbot/chat"
                // })
              },//非必填
              guideList:['快捷提示'],
              navHeight: getNavTop(), //导航栏高度，默认44，小程序中需要减去导航栏高度才会显示在正确位置
              fail: (error) => {
                Taro.showToast({
                  title: '获取openid失败',
                })
                setTimeout(() => {
                  Taro.navigateBack()
                }, 1000)
              },//非必填
            });
          } else {
            Taro.showToast({
              title: '获取openid失败',
            })
            setTimeout(() => {
              Taro.navigateBack()
            }, 1000)
          }
        })
      } else {
        console.log('登录失败！' + res.errMsg)
      }
    }
  })
}
